VPU User Guide¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
This document describes the VPU (Video Processing Unit) on the Quectel Pi M1, and how to invoke the hardware video encode/decode capabilities from the command line, GStreamer, and FFmpeg.
VPU Overview¶
What is VPU¶
VPU (Video Processing Unit) is the dedicated hardware video encoder/decoder (Qualcomm Venus) on the Qualcomm SM6115 platform of the SC200U device. It operates independently of the CPU and is responsible for encoding and decoding video streams such as H.264, H.265, VP8, and VP9.
Compared with a pure-software codec, using the VPU offers the following advantages:
Lower CPU load: Video processing is fully handled by hardware, freeing the CPU for other tasks;
Higher throughput: Supports real-time, multi-stream concurrent video processing;
Lower power consumption: Hardware encode/decode is more power-efficient than software solutions.
Use Cases¶
The VPU can be used in the following scenarios:
Video decoding: Play local or network video (H.264, H.265, VP9, etc.);
Video encoding: Compress, record, and stream camera footage or raw video;
Video transcoding: Convert one encoding format to another in real time;
Multi-channel surveillance: Concurrent encode/decode of multiple video streams, suitable for NVR/DVR applications;
Audio/Video framework integration: Seamlessly invoke the hardware codec capabilities through GStreamer and FFmpeg.
Usage Tutorial¶
Connect the Device¶
Connect to the device via adb:
adb devices
After confirming the device status is device, you can run the following commands.
Verify VPU Availability¶
Check Device Nodes¶
adb shell "ls -l /dev/video32 /dev/video33"
You should see two video device nodes, corresponding to the decoder and the encoder respectively.
Check Venus Firmware Status¶
# Check the firmware file (root required)
adb shell "ls -l /lib/firmware/venus_v6.mbn"
# Check the vidc status in the kernel (root required)
adb shell "cat /sys/kernel/debug/msm_vidc/core/info"
The output should include the firmware version, register base address, IRQ number, and other information, indicating that the VPU driver and firmware are ready.
Using GStreamer to Invoke the VPU¶
The device system includes the V4L2 M2M plugin for GStreamer, which uses the VPU as a hardware codec backend.
Hardware decoding (play an H.264 video):
gst-launch-1.0 filesrc location=test.h264 ! h264parse ! qtic2vdec ! autovideosink
Hardware encoding:
gst-launch-1.0 videotestsrc num-buffers=30 ! videoconvert ! \
video/x-raw,format=NV12,width=640,height=480 ! qtic2venc ! \
filesink location=out.h264
Required plugin:
gstreamer1.0-plugins-good(providesv4l2h264dec/v4l2h264enc).
FAQ¶
Codec reports -22 (EINVAL) or invalid v4l2 color format¶
Cause: The pixel format or color space parameter passed in is not supported (for example, the color format is 0).
Solution: Supply the correct
colorspaceand pixel format (e.g., NV12) for the input, and confirm that the plane count and stride parameters are correct.
Some ioctl calls return ENOTTY¶
Cause: msm_vidc only responds to certain ioctls after a session has been established (it lazy-loads the firmware).
Solution: Establish the session first via S_FMT + STREAMON, or perform the operation within the GStreamer / FFmpeg framework.
GStreamer / FFmpeg reports a missing v4l2 plugin¶
Cause: The corresponding plugin is not installed, or V4L2 M2M support is not enabled.
Solution: Install
gstreamer1.0-plugins-good; FFmpeg must be compiled with--enable-v4l2-m2m.